Я создаю сайт, и я просто понял, что у меня есть эта проблема.htaccess mod rewrite, даже если существует папка
Когда пользователи идут на www.website.com/something Я хочу Htaccess открыть www.website.com/index.php?s=something, это прекрасно работает с моим текущим перенаправлении, за исключением если у меня есть это «что-то» как существующая папка.
"S" означает "подстраниц"
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
У меня есть проблемы, только если папка существует (/ JS/CSS/изображений ..etc), поэтому, когда я пытаюсь получить доступ к www.website. com/images он по-прежнему отображает правильную страницу, но это показывает это в адресной строке www.website.com/images/?s=images. Следует отметить, что если я изменил? S = изображения на? S = images213123, php все еще только распознает/images/as $ _GET ['s'];
У меня нет опыта с htaccess, но это то, что я собрал до сих пор, возможно, проблема в другом месте, а не в строке выше. Я попытался переместить [L] на 3-е правило, попытался отделить проблемное правило от остальных, попробовал все, что мог, с моими ограниченными знаниями, я не мог заставить ничего работать.
Любые подсказки или идеи очень ценятся! Спасибо заранее
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
Edit: Добавление «DirectorySlash Off» и изменения условий и правил, как в ответ @ Джон Лин исправили проблему. Мне также пришлось очистить кеш Firefox, чтобы увидеть изменения. Это мой последний htaccess, который отлично работает для моей цели.
Options +FollowSymlinks
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2
# I intentionally skipped the conditions here
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
@CristianBenescu это из-за mod_dir. Apache всегда будет перенаправлять запросы для каталогов, которые не имеют завершающего косая черта, если вы хотите отключить это, вы можете добавить 'DirectorySlash off', но это делает так, чтобы люди могли просматривать содержимое каталога, даже если есть индексный файл –