Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在没有.htaccess的情况下重写URL?_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 如何在没有.htaccess的情况下重写URL?

Php 如何在没有.htaccess的情况下重写URL?,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我一直在网上读到这个,但仍然不知道如何正确地实现它。如果您能帮助我理解如何在没有.htaccess的情况下进行url重写,我将不胜感激 为了检查mod_rewrite是否启用,我运行了命令~\sudo apachectl-t-D DUMP_MODULES。它产生了以下模块:重写模块(共享)。我不知道它是否与mod_rewrite相同 文件夹/etc/apache2/mods已启用/具有文件rewrite.load 我不清楚应该在哪个文件中添加重写规则 位于/etc/apache2/中的文件htt

我一直在网上读到这个,但仍然不知道如何正确地实现它。如果您能帮助我理解如何在没有.htaccess的情况下进行url重写,我将不胜感激

为了检查mod_rewrite是否启用,我运行了命令
~\sudo apachectl-t-D DUMP_MODULES
。它产生了以下模块:
重写模块(共享)
。我不知道它是否与
mod_rewrite
相同

文件夹
/etc/apache2/mods已启用/
具有文件
rewrite.load

我不清楚应该在哪个文件中添加重写规则

位于
/etc/apache2/
中的文件
httpd.conf
为空。但是,在
/etc/apache2/sites enabled/
中有一个名为
000 default
的文件,它如下所示:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

服务器管理员webmaster@localhost
DocumentRoot/var/www
选项如下符号链接
不允许超限
选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
ScriptAlias/cgi-bin//usr/lib/cgi-bin/
不允许超限
选项+执行CGI-多视图+符号链接所有者匹配
命令允许,拒绝
通融
ErrorLog${APACHE_LOG_DIR}/error.LOG
#可能的值包括:调试、信息、通知、警告、错误、临界值、,
#警惕,埃默格。
日志级别警告
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
别名/doc/“/usr/share/doc/”
选项索引多视图跟随符号链接
不允许超限
命令拒绝,允许
全盘否定
允许从127.0.0.0/255.0.0.0::1/128开始

我一点也不清楚应该在哪里添加重写规则。我尝试将它们添加到这个
000 default
文件的
部分,但没有成功。

您将重写代码放在.htaccess文件所在的目录块中(如果您使用它们)。例如,如果/var/www是您的docroot,您可以将其放在:

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all

        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule . /index.php [L]
    </Directory>

选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则/index.php[L]

如果您使用的是apache 2.2.16或更高版本,请使用

FallbackResource /index.php

因为某种原因,它对我不起作用。我想做的是删除url中的
.php
扩展名。按照您的指示,我已将重写规则(在.htaccess中有效)添加到000默认文件的
,因此它现在看起来是这样的,但不起作用:
选项索引遵循ymlinks多视图允许覆盖所有顺序允许,在重写条件%{REQUEST\u FILENAME}时拒绝所有重写引擎的允许-f RewriteRule^([^\.]+)$$1.php[NC,L]
@dmit这在您的.htaccess文件中有效吗?.htaccess文件所在的目录是什么?您还可以在OP a的前后URL示例中提供它吗?我在
根目录>httpdocs
中有它。我把它移动到根目录,它也可以工作。之前的示例:www.mysite.com/login.php;之后:www.mysite.com/loginI我不明白。您是指您的代码和
.htaccess
文件在
/var/www/httpdocs
中吗?