htaccess переписать url как Stack Overflow

77
8

Qaru генерирует URL перезаписи,

поэтому мне нужно знать, как я могу это сделать, например, Stack Overflow?

http://stackoverflow.com/questions/9168364/how-to-rewrite-seo-friendly-urls-like-stackoverflow => 200 ok.(without trailing slash)
http://stackoverflow.com/questions/9168364/how-to-rewrite-seo-friendly-urls-like-stackoverflow/ => 200 ok.(with trailing slash)
http://stackoverflow.com/questions/9168364/ => 301 redirect.
http://stackoverflow.com/questions/9168364 => 301 redirect.

Как я могу это сделать с помощью mod_rewrite?

У меня есть что-то вроде этого:

RewriteRule ^([0-9]+)[/]([^/]*) ./cat.php?id=$1&title=$2 [L,NC]

mydomain.com/999 => 404 not found.
mydomain.com/999/ => 200 ok.
mydomain.com/999/test => 200 ok.
mydomain.com/999/test/test2 => 200 ok.
mydomain.com/999/test/test2/test3 => 200 ok.
mydomain.com/999/test/test2/test3/test4 => 200 ok.

пожалуйста, дайте мне знать, как я могу изменить RewriteRule?

спросил(а) 2021-01-25T15:57:34+03:00 4 месяца, 2 недели назад
1
Решение
100

Вам нужно немного настроить ваше регулярное выражение, сделав необязательным косые черты. Используйте это правило:

RewriteRule ^([0-9]+)(?:/([^/]*))?/?$ ./cat.php?id=$1&title=$2 [L,NC]

ответил(а) 2021-01-25T15:57:34+03:00 4 месяца, 2 недели назад
64

.htaccess:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

# Get rid of index.php
RewriteCond %{REQUEST_URI} /index\.php
RewriteRule (.*) index.php?rewrite=2 [L,QSA]

# Rewrite all directory-looking urls
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*) index.php?rewrite=1 [L,QSA]

# Try to route missing files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} public\/ [OR]
RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png|ico|flv|htm|html|php|css|js)$
RewriteRule . - [L]

# If the file doesn't exist, rewrite to index
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rewrite=1 [L,QSA]

</IfModule>

index.php:

$url = $_SERVER['REQUEST_URI'];
$url = explode("/",substr($url,1));

Ваши ссылки будут читаемыми PHP следующим образом:


http://www.website.com/First/Second/Third

$url[0] >> 'First'

$url[1] >> 'Second'

$url[2] >> 'Third'

ответил(а) 2021-01-25T15:57:34+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема