我遇到一个问题,即google使用错误的网址索引某些网页。
他们正在编制索引的网址是:
http://www.example.com/index.php/section1/section2
我需要它重定向到:
http://www.example.com/section1/section2
.htaccess不是我的强项,所以任何帮助都会非常感激。
提前致谢。
答案 0 :(得分:56)
这是从网址隐藏index.php
的基本规则。将其放在根.htaccess
文件中。
mod_rewrite
,这适用于高于5.2.6的PHP版本。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
答案 1 :(得分:44)
要从网址中删除index.php
,并将访问者重定向到该网页的非index.php版本:
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
这会将/index.php/myblog
干净地重定向到/myblog
。
使用301重定向将保留Google搜索引擎排名。
答案 2 :(得分:17)
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?)
RewriteRule ^ /%1 [R=301,L]
答案 3 :(得分:8)
假设现有的网址是
http://example.com/index.php/foo/bar
我们希望将其转换为
http://example.com/foo/bar
您可以使用以下规则:
RewriteEngine on
#1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC]
RewriteRule ^ /%1 [NE,L,R]
#2)internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]
在spep#1中,我们首先匹配请求字符串并捕获 /index.php / 之后的所有内容,捕获的值保存在%1 var中。然后我们将浏览器发送到新的URL。 #2在内部处理请求。当浏览器到达 / foo / bar 时,#2rule会将新网址重写到orignal位置。
答案 4 :(得分:5)
执行以下步骤
1。确保托管/您的pc mod_rewrite模块处于活动状态。如果不活动则尝试以某种方式激活,打开httpd.conf文件。你可以在phpinfo.php中查看这个来查找。
更改此设置:
#LoadModule rewrite_module modules/mod_rewrite.so
要重启wamp
LoadModule rewrite_module modules/mod_rewrite.so
2. 然后转到.htaccess文件,并尝试修改为:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
如果以上不起作用请尝试使用此功能:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
3. 将.htaccess文件移动到根目录,其中是index.php。
www OR root folder
- index.php
- .htaccess
答案 5 :(得分:3)
从wordl网站的网址中删除index.php的步骤。
<?php phpinfo?(); ?>
现在运行此文件 - www.yoursite.com/phpinfo.php,它将在Load modules部分显示mod_rewrite。 如果未启用,则在终端上执行以下命令。
sudo a2enmod rewrite sudo service apache2 restart
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
进一步允许.htaccess到666以便它变得可写,现在你可以对你的wordpress永久链接进行更改。
现在转到设置 - &gt;永久链接 - &gt;并更改为您需要的网址格式。 删除此代码/index.php/%year%/%monthnum%/%day%/%postname%/ 并在自定义结构上插入此代码:/%postname%/
如果仍未成功,请检查您的托管,我的是digitalocean服务器,所以我自己清除了
编辑文件/etc/apache2/sites-enabled/000-default.conf
在DocumentRoot / var / www / html
之后添加了这一行<Directory /var/www/html> AllowOverride All </Directory>
重新启动Apache服务器
注意:/ var / www / html将是您的文档根目录
答案 6 :(得分:0)
有些人可能会使用mod_rewrite使用上面列出的方法获得403。重现index.php的另一种解决方案如下:
<IfModule mod_rewrite.c>
RewriteEngine On
# Put your installation directory here:
RewriteBase /
# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
答案 7 :(得分:0)
这将起作用,在.htaccess文件中使用以下代码 RewriteEngine开启
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
答案 8 :(得分:0)
For more information and codeigniter tutorial
在项目根目录上创建.htaccess文件,并在下面的代码中删除index.php
RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
答案 9 :(得分:0)
我已使用上述部分中的许多代码从基本URL中删除index.php。但这并没有从我的目的开始。因此,您可以使用我使用过的此代码,并且它可以正常工作。
如果您确实需要从基本URL中删除index.php,则只需将此代码放在htaccess中即可。
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
答案 10 :(得分:0)
我不需要大量代码就可以为我解决这个问题。
我有 https://example.com/entitlements/index.php ,但我希望任何键入它的人在输入 {{3} } 由于包含 index 这个词,因此您仍然会收到错误消息,尽管 index.php 的内容仍会正确显示,但始终会抛出错误>
大臣在“ https://example.com/entitlements/index”上的帖子 解决了
使用以下内容编辑您的.htaccess文件 将访问https://stackoverflow.com/a/1055655/12192635的人重定向到404页
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]
将访问https://example.com/entitlements/index.php的人重定向到404页
RewriteCond %{THE_REQUEST} \index[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]
尽管如此,我们已经知道上面的代码可以与堆栈上已经存在的代码一起使用,请参阅我在哪里将所有上面的代码应用到最后。
# The following will allow you to use URLs such as the following:
#
# example.com/anything
# example.com/anything/
#
# Which will actually serve files such as the following:
#
# example.com/anything.html
# example.com/anything.php
#
# But *only if they exist*, otherwise it will report the usual 404 error.
Options +FollowSymLinks
RewriteEngine On
# Remove trailing slashes.
# e.g. example.com/foo/ will redirect to example.com/foo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=permanent,QSA]
# Redirect to HTML if it exists.
# e.g. example.com/foo will display the contents of example.com/foo.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
# Redirect to PHP if it exists.
# e.g. example.com/foo will display the contents of example.com/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]
RewriteCond %{THE_REQUEST} \index[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]
答案 11 :(得分:0)
试试这个,它对我有用
<IfModule mod_rewrite.c>
# Enable Rewrite Engine
# ------------------------------
RewriteEngine On
RewriteBase /
# Redirect index.php Requests
# ------------------------------
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
# Standard ExpressionEngine Rewrite
# ------------------------------
RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>