2016-11-01 2 views
1

Я посмотрел на это: htaccess remove index.php from url, но это не сработало, и в комментариях, похоже, есть несогласие с верхним ответом.Htaccess Удалить Index.php С URL-адресом

Если я набираю номер http://www.example.com/thanksgiving/index.php/getThankyou, я получаю страницу, которую я хочу обслуживать.

Если я печатаю в http://www.example.com/thanksgiving/getThankyou я получаю 404.

То, что я пытался в моем HTAccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/thanksgiving/(.*)/$ /thanksgiving/index.php/$1 [L] 
</IfModule> 

Как это сделать так /thanksgiving/getThankyou/ или любой URL, начиная с /thanksgiving в URL приводит к надлежащему ресурсу, который обслуживается? Опять же, он в настоящее время доступен, когда index.php находится в URL-адресе.

Я также попытался: RewriteRule ^/thanksgiving/[^/]*/$ /thanksgiving/index.php/$1 [L], но это не сработало ...

Edit: Это казалось часть HTAccess установлен для WordPress и может конфликтовать с желаемым поведением выше:

Wordpress часть того же htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

Это мешает? Как мне смириться с URL-адресами /thanksgiving/, которые не являются частью приложения Wordpress?

Edit:

выше относится только к корню (public_html) Htaccess, ниже является Htaccess в самой /thanksgiving/, пожалуйста, анализировать конфликты, спасибо за вашу помощь!

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 
    RewriteBase/
    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Handle Authorization Header 
    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
</IfModule> 
# Do not change this line. 
# Change example.com to your domain name 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 

# Change your_app_name to the subfolder name 
RewriteCond %{REQUEST_URI} !^/thanksgiving/ 

# Don't change the following two lines. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Change your_app_name to the subfolder name 
# Change example.com to your domain name 
RewriteRule ^(.*)$ /thanksgiving/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ thanksgiving/index.php [L] 
+0

Ссылка на другой ответ верна. Я не уверен, почему вы изменили «RewriteRule» так, как вы. Измените его на 'RewriteRule^(. *) $ /index.php?/$1 [L]'. Это также не обязательно должно быть между 'IfModule'. Должен просто работать с использованием 'RewriteEngine On' – Lag

+0

@thickguru. Я изменил его, потому что единственные URL-адреса, которые я хочу переписать, это те, которые начинаются с'/thanksgiving/' –

ответ

1

Вы должны удалить ведущий слэш из вашего шаблона переписывания:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(?:thanksgiving/)?(.*)$ /thanksgiving/index.php/$1 [L] 
</IfModule> 

В противном случае правило будет принимать Ури, начиная с двойной leding косой черты (то есть: // благодарение/).

+0

Не работает, нужно ли также использовать вторую ведущую косую черту? –

+0

См. Правки ... –

+0

@SummerDeveloper Добавьте это перед вашим wp или другим rewriteRules. – starkeen

Смежные вопросы