Я пытаюсь получить доступ к двум моим страницам и переписать их URL с помощью.htaccess.
Первая страница, к которой я пытаюсь получить доступ:
Вторая страница, к которой я пытаюсь получить доступ:
Мой текущий.htaccess код:
# Apache Rewrite Rules
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]
RewriteRule ^([^\.]+)/$ $1.php
# Remove .html-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^\.]+)/$ $1.html
# End of Apache Rewrite Rules
</IfModule>
Первая страница работает как /polls/username, но вторая не читает значение опроса, и я думаю, что перенаправляется на polls.php.
Может ли кто-нибудь объяснить, что я делаю неправильно?
заранее спасибо
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]
Здесь я поменял ваши два правила, поэтому сначала проверяем идентификаторы (для getpoll
- обратите внимание, как я удалил буквы из выражения). Если мы не выполняем проверку идентификатора (т.е. Есть буквы в сегменте), тогда он будет переписываться для polls
.
Обновить:
Per arco444, если имя пользователя - это число, это не сработает. Это более конкретное решение:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^getpoll/([0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]
RewriteRule ^polls/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]
^[A-Za-z0-9-]
.
polls.php
потому, что он первый. Разве вы не хотите, чтобы URL были чем-то вроде/polls/username
и/getpoll/poll
?